package com.hotel.controle;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.hibernate.Session;

import com.hotel.dao.ProdutoDAO;
import com.hotel.entidade.Produto;
import com.hotel.util.HibernateUtil;

@ManagedBean(name = "produtoBean")
@SessionScoped
public class ProdutoControle {

	private Session session;
	private ProdutoDAO produtoDAO;
	private Produto produto;
	@SuppressWarnings("rawtypes")
	private DataModel listaProdutos;
	private String keyword = "";
	
	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	public ProdutoDAO getProdutoDAO() {
		return produtoDAO;
	}

	public void setProdutoDAO(ProdutoDAO produtoDAO) {
		this.produtoDAO = produtoDAO;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public String getKeyword() {
		return keyword;
	}

	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}

	@SuppressWarnings("rawtypes")
	public DataModel getListaProdutos() {
		if (this.listaProdutos == null) {
			listarProdutos();
		}
		return listaProdutos;
	}

	public void listarProdutos() {
		session = HibernateUtil.configureSessionFactory().openSession();
		produtoDAO = new ProdutoDAO(session);
		List<Produto> lista = produtoDAO.listaTodos();
		listaProdutos = new ListDataModel<Produto>(lista);
	}

	public void setListaProdutos(DataModel<Produto> listaprodutos) {
		this.listaProdutos = listaprodutos;
	}

	public String preparaInserirProduto() {
		produto = new Produto();
		return "/produtos/inserirProduto";
	}

	public String inserirProduto() {
		session = HibernateUtil.configureSessionFactory().openSession();
		produtoDAO = new ProdutoDAO(session);
		try{
			produtoDAO.insere(produto);
		} catch (Exception e) {
			e.printStackTrace();
		}
		listarProdutos();
		return "/produtos/buscaProduto";
	}

	public String preparaAlterarProduto() {
		produto = (Produto) (listaProdutos.getRowData());
		return "/produtos/alterarProduto";
	}

	public String alterarProduto() {
		produtoDAO = new ProdutoDAO(session);
		try{
			produtoDAO.atualisa(produto);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "/produtos/buscaProduto";
	}

	public String excluirProduto() {
		Produto produto = (Produto) (listaProdutos.getRowData());
		produtoDAO = new ProdutoDAO(session);
		try{
			produtoDAO.deleta(produto);
		} catch(Exception e){
			e.printStackTrace();
		}
		listarProdutos();
		return "/produtos/buscaProduto";
	}

	public String buscarProduto() {
		session = HibernateUtil.configureSessionFactory().openSession();
		produtoDAO = new ProdutoDAO(session);
		List<Produto> lista = produtoDAO.pesquisarProduto(this.getKeyword());
		listaProdutos = new ListDataModel<Produto>(lista);
		this.keyword = null;
		return "/produtos/buscaProduto";
	}

}
